package wetogether.travelinfo.vo;

import wetogether.travelinfo.util.CommonConstants;

/**
 * 페이징 처리를 위한 Bean
 * @author 관리자
 *
 */
public class PagingBean {
	//총 게시물 수
	private int totalContent;
	//현재 페이지 
	private int nowPage;
	//한 페이지에서 보여줄 게시물 수
	private int numberOfContentPerPage=CommonConstants.CONTENT_NUMBER_PER_PAGE;
	//페이지 그룹에 들어갈 페이지 수
	private int numberOfPageGroup=CommonConstants.PAGEGROUP_NUMBER_PER_PAGE;
	public PagingBean(){}
	public PagingBean(int totalContent,int nowPage){
		this.totalContent=totalContent;
		this.nowPage=nowPage;
	}
	public int getTotalContent() {
		return totalContent;
	}
	public void setTotalContent(int totalContent) {
		this.totalContent = totalContent;
	}
	public int getNowPage() {
		return nowPage;
	}
	public void setNowPage(int nowPage) {
		this.nowPage = nowPage;
	}
	public int getNumberOfContentPerPage() {
		return numberOfContentPerPage;
	}
	public void setNumberOfContentPerPage(int numberOfContentPerPage) {
		this.numberOfContentPerPage = numberOfContentPerPage;
	}
	public int getNumberOfPageGroup() {
		return numberOfPageGroup;
	}
	public void setNumberOfPageGroup(int numberOfPageGroup) {
		this.numberOfPageGroup = numberOfPageGroup;
	}
	@Override
	public String toString() {
		return "PagingBean [nowPage=" + nowPage + ", numberOfContentPerPage="
				+ numberOfContentPerPage + ", numberOfPageGroup="
				+ numberOfPageGroup + ", totalContent=" + totalContent + "]";
	}
	/**
	 * 총 페이지 수 리턴 ex) 15 - 3, 16 - 4
	 * 전체 게시물 수 % 한 페이지에 보여질 게시물 수
	 * 0 이면 나눈 값이 페이지 수
	 * 0 이 아니면 나눈값 + 1
	 * @return
	 * @throws SQLException 
	 */
	public int getTotalPage(){
		int totalPage = 0;		
		if(totalContent % numberOfContentPerPage == 0) {
			totalPage = totalContent / numberOfContentPerPage;
		} else {
			totalPage = (totalContent / numberOfContentPerPage) + 1;
		}		
		return totalPage;
	}
	/**
	 * 전체 페이지 그룹 수 리턴. 23의 게시물 -> 5 페이지 -> 2 그룹
	 * 총 페이지 수 % Page group 내 페이지 수
	 * --> 0 이면 나눈 값
	 * --> 0 이 아니면 나눈값 +1
	 * @return
	 * @throws SQLException 
	 */
	public int getTotalPageGroup(){
		int totalPageGroup = 0;
		int totalPage = getTotalPage();
		if(totalPage % numberOfPageGroup == 0) {
			totalPageGroup = totalPage / numberOfPageGroup;
		} else {
			totalPageGroup = (totalPage / numberOfPageGroup) + 1;
		}
		return totalPageGroup;
	}
	/**
	 * 현재 페이지가 속한 페이지 그룹 번호 리턴
	 * 현재 페이지 % Page 그룹 내 페이지 수
	 * 0 -> 나눈값
	 * 0 이 아니면  -> 나눈값 +1
	 * @return
	 */
	public int getNowPageGroup(){
		int nowPageGroup = 0;
		if(nowPage % numberOfPageGroup == 0) {
			nowPageGroup = nowPage / numberOfPageGroup;
		} else {
			nowPageGroup = (nowPage / numberOfPageGroup) + 1;
		}
		return nowPageGroup;
	}
	/**
	 * 현재 페이지가 속한 페이지 그룹의 시작 페이지 번호를 리턴
	 * Page Group의 page 수*(현재 페이지 그룹 -1)+1
	 * @return
	 */
	public int getStartPageOfPageGroup(){
		int startPageOfPageGroup = 0;
		int nowPageGroup = getNowPageGroup();
		startPageOfPageGroup = ((nowPageGroup - 1) * numberOfPageGroup) + 1;
		return startPageOfPageGroup;
	}
	/**
	 * 현재 페이지가 속한 페이지 그룹의 마지막 페이지 번호 리턴
	 * 현재 페이지 그룹*페이지 그룹 내 페이지 수
	 * 단! 결과가 전체 페이지 수보다 클 경우 전체 페이지 수가 마지막 페이지로 되어야 함 
	 * @return
	 * @throws SQLException 
	 */
	public int getEndPageOfPageGroup(){
		int endPageOfPageGroup = 0;
		int nowPageGroup = getNowPageGroup();
		int totalPage = getTotalPage();
		endPageOfPageGroup = nowPageGroup * numberOfPageGroup;
		if(endPageOfPageGroup > totalPage) {
			endPageOfPageGroup = totalPage;
		}
		return endPageOfPageGroup;
	}
	/**
	 * 이전 페이지 그룹이 있는지 확인하여 있으면 true 없으면 false 리턴
	 * 현재 페이지 그룹이 1보다 크면 true
	 * @return
	 */
	public boolean isPreviousPageGroup(){
		boolean flag = false;
		int nowPageGroup = getNowPageGroup();
		if(nowPageGroup > 1) {
			flag = true;
		}
		return flag;
	}
	/**
	 * 다음 페이지 그룹이 있는 지 확인
	 * 현재 페이지 그룹이 마지막 페이지 그룹보다 작으면 true
	 * @return
	 * @throws SQLException 
	 */
	public boolean isNextPageGroup(){
		boolean flag = false;
		int nowPageGroup = getNowPageGroup();
		int totalPageGroup = getTotalPageGroup();
		if(nowPageGroup < totalPageGroup) {
			flag = true;
		}
		return flag;
	}
}